7.10 分组后的另和中聚合方式
使用agg()函数做分组聚合非常简单直观,用apply()可能稍显复杂,但胜在灵活,以班别为分组依据,合并姓名,并且求语文和数学的均值。
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.7.09 分组进阶应用之分组排名.xlsx")
print (df)
df=pd.DataFrame(df.groupby( "班级" ).apply(lambda d:
{
"名单" :d.姓名.str.cat(sep="、"),
"语文平均值" :d.语文.mean(),
"数学平均值" :d.数学.mean()
}
).to_dict()).T.reset_index().rename(columns={"index" :"班级"})
#.to_dict()是写在apply后面,但在pd.DateFrame里面,而.T是写在pd.DataFrame后面
print (df)
返回:
班级 | 姓名 | 语文 | 数学 | |
---|---|---|---|---|
0 | 1班 | 张三 | 90 | 83 |
1 | 1班 | 李四 | 100 | 87 |
2 | 1班 | 王五 | 95 | 88 |
3 | 2班 | 郭流子 | 81 | 97 |
4 | 2班 | 许麻子 | 92 | 89 |
5 | 3班 | 宋狗子 | 89 | 88 |
6 | 3班 | 小曾 | 84 | 84 |
7 | 3班 | 韦大宝 | 87 | 94 |
班级 | 名单 | 语文平均值 | 数学平均值 | |
---|---|---|---|---|
0 | 1班 | 张三、李四、王五 | 95.0 | 86.0 |
1 | 2班 | 郭流子、许麻子 | 86.5 | 93.0 |
2 | 3班 | 宋狗子、小曾、韦大宝 | 86.666667 | 88.666667 |